﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using CamadaDeDados;
using CamadaDeNegocios.Models;

using MySql.Data.MySqlClient;

namespace CamadaDeNegocios.Controllers
{
    public class PessoaEnderecoController
    {
        /// <summary>
        /// Método para inserir um novo endereco
        /// </summary>
        /// <param name="pEndereco"></param>
        public static void Inserir(PessoaEndereco pEndereco)
        {
            try
            {
                Conexao _conexao = new Conexao("pessoa_endereco");

                _conexao.AdicionarParametro("IdPessoa", pEndereco.IdPessoa);
                _conexao.AdicionarParametro("Item", pEndereco.Item);
                _conexao.AdicionarParametro("Logradouro", pEndereco.Logradouro);
                _conexao.AdicionarParametro("Numero", pEndereco.Numero);
                _conexao.AdicionarParametro("Bairro", pEndereco.Bairro);
                _conexao.AdicionarParametro("Cidade", pEndereco.Cidade);
                _conexao.AdicionarParametro("Estado", pEndereco.Estado);
                _conexao.AdicionarParametro("Cep", pEndereco.Cep);

                _conexao.ExecutarComando(ComandosBanco.Insere);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Método para alterar o endereço 
        /// </summary>
        /// <param name="pEndereco"></param>
        public static void Alterar(PessoaEndereco pEndereco)
        {
            try
            {
                Conexao _conexao = new Conexao("pessoa_endereco");

                _conexao.AdicionarParametro("IdPessoa", pEndereco.IdPessoa);
                _conexao.AdicionarParametro("Item", pEndereco.Item);
                _conexao.AdicionarParametro("Logradouro", pEndereco.Logradouro);
                _conexao.AdicionarParametro("Numero", pEndereco.Numero);
                _conexao.AdicionarParametro("Bairro", pEndereco.Bairro);
                _conexao.AdicionarParametro("Cidade", pEndereco.Cidade);
                _conexao.AdicionarParametro("Estado", pEndereco.Estado);
                _conexao.AdicionarParametro("Cep", pEndereco.Cep);

                _conexao.ExecutarComando(ComandosBanco.Altera);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Método para buscar o endereço 
        /// </summary>
        /// <param name="pIdPessoa">Pessoa a quem pertence o endereço</param>
        /// <param name="pItem">Número do item</param>
        /// <returns>Endereço encontrado</returns>
        public static PessoaEndereco BuscaPorID(int pIdPessoa, int pItem)
        {
            try
            {
                Conexao _conexao = new Conexao("pessoa_endereco");

                _conexao.AdicionarParametro("IdPessoa", pIdPessoa);
                _conexao.AdicionarParametro("Item", pItem);

                MySqlDataReader _leitor = _conexao.RetornarDataReader(ComandosBanco.BuscaPorID);

                if (_leitor.Read())
                    return new PessoaEndereco(_leitor);
                else
                    return null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Método que busca o endereço por pessoa
        /// </summary>
        /// <param name="pIdPessoa">Pessoa a ser pesquisada</param>
        /// <returns>Lista de Endereços</returns>
        public static List<PessoaEndereco> PorPessoa(int pIdPessoa)
        {
            Conexao _conexao = new Conexao("pessoa_endereco");

            _conexao.AdicionarParametro("IdPessoa", pIdPessoa);

            MySqlDataReader _leitor = _conexao.RetornarDataReader("por_pessoa");

            List<PessoaEndereco> _lista = new List<PessoaEndereco>();

            while (_leitor.Read())
            {
                _lista.Add(new PessoaEndereco(_leitor));
            }

            return _lista;
        }
    }
}
